import {reqShopCartList,reqDeleteCart,reqCheckCart} from '@/api'
import {userTemp} from '@/utils/temp_token'
const state={
    userTempId:userTemp(),
    shopCart:[]
}
const actions = {
    async getShopCartList({commit}){
        // 因为需要获取用户的信息找到相对应的购物车列表所以用到了uuid
        let result  = await reqShopCartList();
        if(result.code == 200){
            // console.log(result.data);
            commit('GETSHOPCARTLIST',result.data)
        }
    },
    async deleteCart({commit},skuId){
        let result = await reqDeleteCart(skuId);
        if(result.code == 200){
            return "ok"
        }else{
            return Promise.reject(new Error('faile'))
        }
    },
    // 单选框
   async updateChecked({commit},{skuId,isChecked}){
    //    只需要获取修改的结果请求是否成功  真正的修改操作时后台的人帮我们实现的
       let result =  await reqCheckCart(skuId,isChecked);
       if(result.code == 200){
           return 'ok'
       }else{
           return Promise.reject(new Error('faile'))
       }
    },
    // 全选框
    async updateAllCart({dispatch,getters,commit},isChecked){
        // 写一个空数组并把调用updateChecked 返回的值放在一个值的里面  在进行判断里面的值是不是都是成功Promise 
        // 因为只有一个一个修改的
        let arr =[]
        getters.shopCartData.cartInfoList.forEach((item)=>{
               let promise = dispatch('updateChecked',{skuId:item.skuId,isChecked})
                arr.push(promise)
        })
        return Promise.all(arr)
    },
    // 删除选中商品
    async deleteCartByChecked({dispatch,getters,commit}){
        let arr = []
        getters.shopCartData.cartInfoList.forEach((item)=>{
            if(item.isChecked == 1){
                let promise = dispatch('deleteCart',item.skuId)
                arr.push(promise)
            }
        })
        return Promise.all(arr);
    }
}
const mutations = {
    GETSHOPCARTLIST(state,shopCartlist){
            state.shopCart = shopCartlist
    }
}
const getters ={
    shopCartData(state){
            return state.shopCart[0]||{}
    }
}
export default {
    state,
    actions,
    mutations,
    getters
}